package BlogTest;

import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.junit.jupiter.params.provider.MethodSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;

import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class BlogCases extends InitAndClose{

    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments("http://127.0.0.1:8080/blog_system/blog_detail.html?blogId=","好好学习文章"));

    }

    /*
    @Test
    void LoginSuccess() throws InterruptedException {
        //输入账号密码后进入博客列表页查看列表页的作者是否与登录的用户名一致（这里是张三）
        webDriver.get("http://127.0.0.1:8080/blog_system/login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");
        Thread.sleep(3000);
        webDriver.findElement(By.cssSelector("#password")).sendKeys("123");
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#submit")).click();

        //点击后然后正常来讲就进入了博客列表页，所以我们测试人员就需要获取点击后进入的url：
        String url = webDriver.getCurrentUrl();
        //然后我们就可以判断点击后进入的页面的地址与我们获取到的地址是否一致，如果一致那么就正确了
        //http://127.0.0.1:8080/blog_system/blog_list.html，这个是前端点击提交后的地址
    //如果报错就没通过
        Assertions.assertEquals(url,"http://127.0.0.1:8080/blog_system/blog_list.html");

        //上面没有断言代表进入正确进入到博客列表页了，然后我们就需要判断一下博客列表页的
        //作业名字与我们登录输入的用户名是否一致
     //下面就得到了博客列表页的用户名
        String yongHuName = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
          Assertions.assertEquals("zhangsan",yongHuName);
    }
*/


    //下面这个与上面那个主要就是带参数了，作用都一样

    /*
    @ParameterizedTest
   @CsvFileSource(resources = "/tst.csv")
    void LoginSuccess(String username,String password,String list_url) throws InterruptedException {
        System.out.println(username + password + list_url);
        //输入账号密码后进入博客列表页查看列表页的作者是否与登录的用户名一致（这里是张三）
        webDriver.get("http://127.0.0.1:8080/blog_system/login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        Thread.sleep(3000);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#submit")).click();

        //点击后然后正常来讲就进入了博客列表页，所以我们测试人员就需要获取点击后进入的url：
        String url = webDriver.getCurrentUrl();
        //然后我们就可以判断点击后进入的页面的地址与我们获取到的地址是否一致，如果一致那么就正确了
        //http://127.0.0.1:8080/blog_system/blog_list.html，这个是前端点击提交后的地址
        //如果报错就没通过
        Assertions.assertEquals(url, list_url);

        //上面没有断言代表进入正确进入到博客列表页了，然后我们就需要判断一下博客列表页的
        //作业名字与我们登录输入的用户名是否一致
        //下面就得到了博客列表页的用户名
        String yongHuName = webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
        Assertions.assertEquals(username, yongHuName);
    }

     */




    //这个是检验登录失败的场景（这里主要把密码输错）
   /* @ParameterizedTest
    @CsvFileSource(resources = "/tct.csv")
    void LoginLose1(String username,String password,String list_url) throws InterruptedException {
        System.out.println(username+password+list_url);
        webDriver.get("http://127.0.0.1:8080/blog_system/login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        Thread.sleep(3000);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#submit")).click();

        //点击后然后正常来讲就进入了博客列表页，所以我们测试人员就需要获取点击后进入的url：
        String url = webDriver.getCurrentUrl();
        //然后我们就可以判断点击后进入的页面的地址与我们获取到的地址是否一致，如果一致那么就正确了
        //http://127.0.0.1:8080/blog_system/blog_list.html，这个是前端点击提交后的地址
        //如果报错就没通过
        Assertions.assertEquals(url,list_url);

    */


       //判断博客列表的博客数量是否为0（看标题有多少即可）


@Order(1)
    @ParameterizedTest
    @CsvFileSource(resources = "/tat.csv")
    void BlogNum(String username,String password,String list_url) throws InterruptedException {
        webDriver.get("http://42.193.100.184:8080/java/login.html");
        webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
        Thread.sleep(3000);
        webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        webDriver.findElement(By.cssSelector("#submit")).click();
        webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
       int num = webDriver.findElements(By.cssSelector(".title")).size();
        System.out.println(num);
        Assertions.assertNotEquals(0,num);
        }


        @Order(2)
      @ParameterizedTest
      @MethodSource("Generator")
    void blogDetail(String url,String title) throws InterruptedException {
          //默认DADASA这篇博客
       webDriver.findElement(By.cssSelector("body > div.container > div.container-right > div:nth-child(1) > a")).click();
          webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
        String currentUrl = webDriver.getCurrentUrl();
          webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
     if(currentUrl.contains(url)){
         System.out.println("测试成功");
     }else{
         Assertions.assertEquals(1,0);
     }

        //然后判断标题一不一样
         Thread.sleep(1000);
         String blogDetailTitle = webDriver.findElement(By.cssSelector("body > div.container > div.container-right > h3")).getText();

         Assertions.assertEquals(title,blogDetailTitle);
            System.out.println(title);
            System.out.println(blogDetailTitle);
        }
        @Order(3)
        @ParameterizedTest
        @CsvFileSource(resources = "/tbt.csv")
    void WriteBlog(String WriterUrl,String ListUrl){
          webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
          webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
       //点击写博客后，判断页面是否跳转到了写博客的页面上
            String currentUrl = webDriver.getCurrentUrl();
            Assertions.assertEquals(WriterUrl,currentUrl);

            //然后就进行写博客

            webDriver.findElement(By.cssSelector("#title-input")).sendKeys("好好学习文章");
            webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
            webDriver.findElement(By.cssSelector("#editor > div.CodeMirror.cm-s-default.CodeMirror-wrap > div.CodeMirror-scroll")).sendKeys("我要好好学习天天向上");
            webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
            webDriver.findElement(By.cssSelector("#submit")).click();
            String currentUrl1 = webDriver.getCurrentUrl();
            Assertions.assertEquals(ListUrl,currentUrl1);
        }


        //注销
        @Order(4)
        @ParameterizedTest
        @CsvFileSource(resources = "/tpt.csv")
    void zhuXiao(String url){
          webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
          String currentUrl = webDriver.getCurrentUrl();
          Assertions.assertEquals(url,currentUrl);
        }

}
